#ifndef __HOOK_H_
#define __HOOK_H_

/************************************************
 * HOOK 系统API
 * 
 * 写一个与系统函数同名的函数
 * 如sleep 当用户调用sleep时。会跳转到自定义函数(创建定时任务，让出协程)
 * 对用户来说，以同步方式写代码。实现异步性能
 * 
 * 
 * extern "C" {} 告诉编译器，以C风格编译这些文件(c++为了实现函数重载，会给函数名添加特殊字符)
*************************************************/
#include <dlfcn.h>
#include <iostream>

#include "fiber.h"
#include "iomanger.h"

namespace learnco{
    bool is_hook_enable();
    void set_hook_enable(bool flag);
}


extern "C" {
// 声明一个指向同样参数、返回值的函数指针类型
//sleep
typedef unsigned int (* sleep_fun)(unsigned int seconds);
extern sleep_fun sleep_f;

//-------------------------------------------------------------------------------------
//socket
typedef int (* socket_fun)(int domain, int type, int protocol);
extern socket_fun socket_f;

typedef int (* connect_fun)(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
extern connect_fun connect_f;

typedef ssize_t (* send_fun)(int sockfd, const void *buf, size_t len, int flags);
extern send_fun send_f;

typedef ssize_t (* recv_fun)(int sockfd, void *buf, size_t len, int flags);
extern recv_fun recv_f;

}


#endif